/**
 * This is for authentication
 */


/**
 * Model for initing credential
 */
model Config {
  accessKeyId?: string(description='accesskey id'),
  accessKeySecret?: string(description='accesskey secret'),
  securityToken?: string(description='security token'),
  bearerToken?: string(description='bearer token'),
  durationSeconds?: number(description='duration seconds',example='3600'),
  roleArn?: string(description='role arn'),
  policy?: string(description='policy'),
  roleSessionExpiration?: number(description='role session expiration',example='3600'),
  roleSessionName?: string(description='role session name'),
  publicKeyId?: string(description='publicKey id'),
  privateKeyFile?: string(description='privateKey file'),
  roleName?: string(description='role name'),
  type?: string(description='credential type',example='access_key')
}

/**
 * Init credential with Config
 * @param config config contains the necessary information to init a credential
 */
init(config: Config);

/**
 * Get accesskey id by credential
 * @return accesskey id
 */
async function getAccessKeyId(): string;

/**
 * Get accesskey secret by credential
 * @return accesskey secret
 */
async function getAccessKeySecret(): string;

/**
 * Get security token by credential
 * @return security token
 */
async function getSecurityToken(): string;

/**
 * Get bearer token by credential
 * @return bearer token
 */
function getBearerToken(): string;

/**
 * Get credential type by credential
 * @return credential type e.g. access_key
 */
function getType(): string;
